package likou.offer;

import java.util.HashMap;
import java.util.Map;

/**
 * @Info:
 * @Author: 唐小尊
 * @Date: 2020/8/29  22:35
 */
public class _56_1 {
    public static void main(String[] args) {
        int[] ww = {1,2,5,2};
        System.out.println(s(ww));
    }
    public int[] singleNumbers(int[] nums) {
        Map<Integer,Integer> map = new HashMap<>();
        for(int i=0;i<nums.length;i++){
            if(map.containsKey(nums[i])){
                map.remove(nums[i]);
            }else{
                map.put(nums[i],1);
            }
        }
        int[] daan = new int[2];
        int index = 0 ;


        for(Integer key:map.keySet()){
            daan[index] = key;
            index++;
        }
        return daan;
    }
    public static int[] s(int[] nums){
        int sum = 0;
        int[] res = new int[2];
        for(int num : nums){
            sum ^= num;
        }
        //如果两个数都为奇数或者都为偶数，则sum为偶数，lowbit不变，则lowbit为最大的一个偶数。与结果相同的分成一组。因为抑或结果为偶数，所以两数其中一数大于抑或结果，一个数小于抑或结果
        //如果两个数奇偶不同，则lowbit=1，通过奇偶区分
        int lowbit = sum & (-sum);//如果是偶数就不变，奇数就为1
        //把两个数丢在两边。
        for(int num : nums){
            if((num & lowbit) == 0){//1&4，2&4，2&4
                res[0] ^= num;//0^1，1^2，3^2
            }else{//5&4
                res[1] ^= num;//0^5
            }
        }
        return res;
    }
}
